import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";

// 解决路由报错
const originalPush = VueRouter.prototype.push;
const originalReplace = VueRouter.prototype.replace;
// push
VueRouter.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject)
    return originalPush.call(this, location, onResolve, onReject);
  return originalPush.call(this, location).catch((err) => err);
};
// replace
VueRouter.prototype.replace = function push(location, onResolve, onReject) {
  if (onResolve || onReject)
    return originalReplace.call(this, location, onResolve, onReject);
  return originalReplace.call(this, location).catch((err) => err);
};

Vue.use(VueRouter);

const routes = [
  {
    path: "/home",
    name: "Home",
    component: Home,
  },
  {
    path: "/",
    redirect: "/home",
  },
  {
    path: "/list",
    name: "Lidt",
    component: () => import("../views/List.vue"),
  },
  {
    path: "/cart",
    name: "Cart",
    component: () => import("../views/Cart.vue"),
  },
  {
    path: "/my",
    name: "My",
    component: () => import("../views/My.vue"),
  },
  {
    path: "/search",
    name: "Search",
    children: [
      {
        path: "/",
        name: "Index",
        component: () => import("../views/search/Search-index.vue"),
      },
      {
        path: "list",
        name: "List",
        component: () => import("../views/search/Search-list.vue"),
      },
    ],
    component: () => import("../views/Search.vue"),
  },
  {
    path: "/detail",
    name: "Detail",
    meta: {
      keepAlive: true, //此组件需要缓存
    },
    component: () => import("../views/Detail.vue"),
  },
  {
    path: "/login",
    name: "Login",
    component: () => import("../views/login/Login.vue"),
  },
  {
    path: "/userLogin",
    name: "UserLogin",
    component: () => import("../views/login/UserLogin.vue"),
  },
  {
    path: "/register",
    name: "Register",
    component: () => import("../views/login/Register.vue"),
  },
  {
    path: "/recovery",
    name: "Recovery",
    children: [
      {
        path: "/",
        name: "Index",
        component: () => import("../views/recovery/RecoveryIndex.vue"),
      },
      {
        path: "btn",
        name: "Btn",
        component: () => import("../views/recovery/RecoveryBtn.vue"),
      },
    ],
    component: () => import("../views/recovery/Recovery.vue"),
  },
  {
    path: "/path",
    name: "Path",
    children: [
      {
        path: "/",
        name: "Index",
        component: () => import("../views/path/Path-Index.vue"),
      },
      {
        path: "/path-list",
        name: "path-list",
        component: () => import("../views/path/Path-List.vue"),
      },
    ],
    component: () => import("../views/Path.vue"),
  },
  {
    path: "/order",
    name: "Order",
    meta: {
      keepAlive: true, //此组件需要缓存
    },
    component: () => import("../views/Order.vue"),
  },
  {
    path: "/payment",
    name: "Payment",
    component: () => import("../views/Payment.vue"),
  },
];

const router = new VueRouter({
  // mode: "history",
  base: process.env.BASE_URL,
  routes,
});

//导航守卫
router.beforeEach((to, from, next) => {
  //要拦截的路由name
  let nextRoute = [
    "Payment",
    "Cart",
    "Path",
    "Order",
    "Index",
    "path-list",
  ];
  //是否登录中
  let userInfo = JSON.parse(localStorage.getItem("teaUseraInfor"));
  console.log(userInfo);
  //当前进入的页面【to.name】,是不是需要验证的那些页面
  if (nextRoute.indexOf(to.name) >= 0) {
    //判断登录状态
    if (!userInfo) {
      return router.replace("/userLogin");
    }
  }
  next();
});

export default router;
